home *** CD-ROM | disk | FTP | other *** search
/ Internet.Works 41 / Issue 41.iso / pc / PCSoftware / Netscape 6 Official Release / nim.xpi / bin / chrome / aim.jar / content / aim / chatContent.js < prev    next >
Encoding:
JavaScript  |  2000-10-12  |  19.8 KB  |  721 lines

  1. // globals
  2.  
  3.     var invitedScreenNames = window.arguments[0].invitedScreenNames;
  4.         dump('got invitedScreenNames'+invitedScreenNames+"\n\n")    
  5.     var chatRoomName= window.arguments[0].chatRoomName;
  6.         dump('got chatRoomName'+chatRoomName+"\n\n")    
  7.     var chatMsg = window.arguments[0].chatMsg;
  8.         dump("got chatMsg "+chatMsg+"\n\n")
  9.     var chatPanelLoaded = false;
  10.  
  11. // globals for invite
  12.  
  13.     var incomingChat    = window.arguments[0].incomingChat;
  14.     var    inviteProposalScreenName = window.arguments[0].incomingChatInviteProposalScreenName;
  15.     var    inviteProposalObj= window.arguments[0].incomingChatInviteProposalObj;
  16.     
  17.  
  18. //ChatRoomManager setup 
  19. //         ***start***
  20. function chatRoomMemberObj(screenName,status,ignored,blocked){
  21.     this.screenName=screenName;
  22.     this.status=status;
  23.     this.ignored=ignored;
  24.     this.blocked=blocked;
  25.     return this;
  26. }
  27.  
  28.  
  29. function chatRoomManagerObj(){
  30.     this.members = new Array();
  31.     this.roomname = "";
  32.     
  33.     return this;
  34.     }    
  35.  
  36. function chatRoomManagerAddMember(managerObj,membername,status,ignored,blocked){
  37.     managerObj.members[managerObj.members.length] = new chatRoomMemberObj(membername,status,ignored,blocked);
  38.     dump("chatRoomManagerAddMember: "+membername+"\n");
  39. }
  40.  
  41. function chatRoomManagerShowMembers(managerObj){
  42.     for(i=0;i<managerObj.members.length;i++){
  43.         alert(managerObj.members[i].screenName);
  44.     }
  45. }
  46.  
  47. function chatRoomManagerDelMember(managerObj,membername){
  48.     var tempMembersArray = new Array();
  49.     for(k=0;k<managerObj.members.length;k++){
  50.         if(managerObj.members[k].screenName.toLowerCase() == membername.toLowerCase()){
  51.             //copy members to new Array, except for deleted one.
  52.             for(m=0;m<managerObj.members.length;m++){
  53.                 if(m!=k){
  54.                     tempMembersArray[tempMembersArray.length] = managerObj.members[m];    
  55.                 }
  56.             }
  57.             //swap old array with new one.
  58.             managerObj.members = tempMembersArray;
  59.         }
  60.     }
  61.         dump("chatRoomManagerDelMember: "+membername+"\n");
  62.  
  63.     
  64. }
  65.  
  66. function chatRoomManagerUpdateMember(managerObj,membername,status){
  67.     var changedFlag = false;
  68.         for(i=0;i<managerObj.members.length;i++){
  69.             if(managerObj.members[i].screenName.toLowerCase()==membername.toLowerCase()){
  70.                 managerObj.members[i].status = status
  71.                 changedFlag=true;
  72.             }
  73.  
  74.         }
  75.         if(!changedFlag){
  76.             //didnt change anyone - must not be here yet!
  77.             chatRoomManagerAddMember(managerObj,membername,status,false,false)
  78.         }
  79.         
  80.         dump("chatRoomManagerUpdateMember[of "+managerObj.members.length+" ]: "+membername+"\n");
  81.  
  82. }
  83.  
  84.  
  85.  var myManager = new chatRoomManagerObj();
  86.  
  87. //ChatRoomManager setup ***end***
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. // Setup Callbacks
  95.  
  96.  
  97. //Setup Room Callbacks (basically event capturing)
  98.  
  99. var RoomCallback= new Object();
  100.  
  101. RoomCallback.OnMessageReceived = function(screenName, rcvdMsg, language){
  102.     dump("OnMessageReceived:"+rcvdMsg+"\n");
  103.     dump (screenName + " SAYETH " + rcvdMsg + " IN " + language +"\n");
  104.     chatContentRecieveMsg(screenName,rcvdMsg)
  105. }
  106.  
  107. RoomCallback.OnWhisperReceived = function(screenName,  rcvdWhispMsg, language){
  108.     dump("OnWhisperReceived:"+rcvdWhispMsg+"\n");
  109.     chatContentRecieveMsg(screenName,rcvdWhispMsg)
  110. }
  111.  
  112.  
  113. RoomCallback.OnLeft = function(errorMsg){
  114.     dump("Onleft: error["+errorMsg+"] \n");
  115.     chatContentReceiveStatus(null, aimString("chat.YouLeft").replace(/%ChatRoom%/, chatRoomName));
  116.     updateStatus(aimString("chat.YouLeft").replace(/%ChatRoom%/, chatRoomName));
  117. }
  118.  
  119. RoomCallback.OnJoined = function(){
  120.     dump("OnJoin: \n")
  121.     dump("Yes I Joined\n");
  122.     chatContentReceiveStatus(null, aimString("chat.YouJoined").replace(/%ChatRoom%/, chatRoomName));
  123.     updateStatus(aimString("chat.YouJoined").replace(/%ChatRoom%/, chatRoomName));
  124.  
  125. }
  126.  
  127. RoomCallback.OnUserJoined = function(screenName){
  128.   dump("OnUserJoined:"+screenName+"\n");
  129.   updateStatus(aimString("chat.OnUserJoined").replace(/%ScreenName%/, screenName));
  130.     //update their status in the list
  131.     top.frames['chatpanel'].chatPanelUpdateScreenName(screenName,"joined treecell-iconic")
  132.     
  133.     //update their status in the global obj
  134.     chatRoomManagerUpdateMember(myManager,screenName,"joined")
  135.     try {
  136.         chatAnnounce_pref=aimPrefsManager().GetBoolPref("aim.chat.AnnounceChatRoom", null, false);
  137.         }
  138.         catch (ex) {
  139.             chatAnnounce_pref = true;
  140.            }
  141.  
  142.     var currentScreenName = aimSessionCurrentScreenName();      
  143.     if ((chatAnnounce_pref && (currentScreenName != screenName)))
  144.     {
  145.         chatContentReceiveStatus(screenName, aimString("chat.OnUserJoined").replace(/%ScreenName%/,""));
  146.     }
  147.     chatRoomManagerUpdateMember(myManager,screenName,"joined treecell-iconic")
  148.  
  149. }
  150.  
  151. RoomCallback.OnUserLeft = function(screenName){
  152.   dump("OnUserLeft:"+screenName+"\n");
  153.   updateStatus(aimString("chat.OnUserLeft").replace(/%ScreenName%/, screenName));
  154.     top.frames['chatpanel'].chatPanelRemoveScreenName(screenName)
  155.     //update global obj
  156.     chatRoomManagerDelMember(myManager,screenName)
  157.  
  158.     var chatAnnounce_pref;
  159.     try {
  160.         chatAnnounce_pref=aimPrefsManager().GetBoolPref("aim.chat.AnnounceChatRoom", null, false);
  161.         }
  162.     catch (ex) {
  163.            chatAnnounce_pref = true;
  164.         }
  165.     if (chatAnnounce_pref)
  166.     {
  167.         chatContentReceiveStatus(screenName, aimString("chat.OnUserLeft").replace(/%ScreenName%/, ""));
  168.     }
  169.     
  170.     
  171. }
  172.  
  173. RoomCallback.OnPaused = function(){
  174.     dump("OnPaused: \n");
  175.     //chatContentReceiveStatus(null,aimString("chat.RoomPaused"));
  176.     updateStatus(aimString("chat.RoomPaused"));
  177.  
  178. }
  179.  
  180. RoomCallback.OnResumed = function(){
  181.     dump("OnResumed: \n");
  182.     //chatContentReceiveStatus(null,aimString("chat.RoomResumed"));
  183.     updateStatus(aimString("chat.RoomResumed"));
  184. }
  185.  
  186. RoomCallback.OnInfoUpdate = function(){
  187.     dump("OnInfoUpdate: \n")
  188.     
  189. }
  190.  
  191. RoomCallback.OnClientError = function(screenName,errMsg){
  192.     dump("OnClientError: error["+screenName+" : "+errMsg+"]\n");
  193.     //chatContentReceiveStatus(screenName,aimString("chat.ClientError"));
  194.     updateStatus(aimString("chat.ClientError").replace(/%ScreenName%/, screenName));
  195. }
  196.  
  197.  
  198. // end Setup Room Callback
  199.  
  200.  
  201.  
  202.  
  203. // Setup ChatManager Callback 
  204.  
  205. var CallBack = new Object();
  206. var RoomCreationTimeStamp = null;
  207. CallBack.title = aimString("chat.WindowTitle");
  208.  
  209. CallBack.OnRequestRoomComplete =  function(roomName,chatRoomObj){
  210.     dump("OnRequestRoomComplete: success on "+roomName+"\n");
  211.     dump("chatRoomObj"+chatRoomObj+"\n")
  212.     RoomCreationTimeStamp= new Date();
  213.     chatRoomObj.SetChatRoomCallback( RoomCallback )
  214.     top.chatRoomObj = chatRoomObj;
  215.     
  216.     dump("roomName is " + roomName + "\n");
  217.     dump("chatRoomName is " + chatRoomName + "\n");
  218.     dump("roomObjName is " + chatRoomObj.GetName() + "\n");
  219.  
  220.     if (roomName)
  221.         window.title= aimString("chat.WindowTitle").replace(/%ChatRoom%/, roomName);
  222.     else if (chatRoomName)
  223.         window.title= aimString("chat.WindowTitle").replace(/%ChatRoom%/, chatRoomName);
  224.     else if (chatRoomObj.GetName())
  225.         window.title= aimString("chat.WindowTitle").replace(/%ChatRoom%/, chatRoomObj.GetName());
  226.     
  227.     window.setTimeout('top.chatRoomObj.Join()', 1000);
  228.     
  229.     window.setTimeout('chatContentInviteMany(invitedScreenNames,chatMsg)',1500);
  230.     //window.setTimeout('top.chatRoomObj.SendMessage("This is working!!")', 30000);
  231.     //window.setTimeout('top.chatRoomObj.SendWhisper("trip004", "Private message for vishy26aug")', 30000);
  232.     
  233. }
  234.  
  235.  
  236. CallBack.OnRequestRoomError =  function(roomName,errMsg){
  237.     dump("OnRequestRoomError: there was an error \n");
  238.  
  239. }
  240.  
  241. CallBack.OnProposalReceived = function(screenName,proposalObj){
  242.     dump("OnProposalReceived:"+screenName+"  \n");
  243.  
  244. }
  245.  
  246.  
  247.  
  248. //Chat Sound handling
  249.  
  250. function chatSound(msg)
  251. {
  252.     aimSoundManager().ChatEvent(msg);
  253. }
  254.  
  255. // first thing to do on startup
  256.  
  257. function chatContentStartup(){
  258.  
  259.     pChatManager = aimChatManager();
  260.     if (!pChatManager)
  261.     {
  262.         dump("chatContentStartup:unable to get pChatManager\n");
  263.         return;
  264.     }
  265.     else{
  266.             dump("chatContentStartup:got  pChatManager\n");
  267.  
  268.     }
  269.  
  270.  
  271.     dump("chatContentStartup: calling pChatManager.GetMaxConcurrentRooms\n");
  272.  
  273.     var rooms = new Object();
  274.     
  275.     try {
  276.         dump("trying pChatManager.GetMaxConcurrentRooms(rooms) \n");
  277.         pChatManager.GetMaxConcurrentRooms(rooms);
  278.         }
  279.     catch (e){
  280.         dump("!!!!! catching js error during pChatManager.GetMacConcurrentRooms !!!!! \n")
  281.         dump ("rooms.value: "+rooms.value + "\n");
  282.     
  283.     }
  284.     
  285.     
  286.  
  287. // got chatroom name from arguments passed to the opendialog
  288.  
  289.  
  290. if(incomingChat){
  291. /*
  292.     try {
  293.         dump("chatContentStartup: trying pChatManager.RequestProposedRoom\n");
  294.         dump("inviteProposalObj:"+inviteProposalObj+"\n");
  295.  
  296.         pChatManager.RequestProposedRoom(CallBack, inviteProposalObj);
  297.         }
  298.     catch (e){
  299.         dump("chatContentStartup: error loading pChatManager.RequestProposedRoom\n");
  300.     
  301.         alert("There was an error loading the Chat window");
  302.         }    
  303. */
  304.     dump("About to CallbackIncoming\n");
  305.     CallBack.OnRequestRoomComplete(window.arguments[0].chatRoomName, window.arguments[0].incomingChatRoom);    
  306.  
  307.     }
  308. else{    
  309.     try {
  310.         dump("chatContentStartup: trying pChatManager.RequestPrivateRoom\n");
  311.         pChatManager.RequestPrivateRoom(CallBack,chatRoomName)
  312.         }
  313.     catch (e){
  314.         dump("chatContentStartup: error loading pChatManager.RequestPrivateRoom\n");
  315.         alert("There was an error loading the Chat window");
  316.         }    
  317. }
  318.  
  319.  
  320. }
  321.  
  322.  
  323. // One more level of callback in order that chat manager can be ready
  324. myExecutionCallback = new Object();
  325. myExecutionCallback.ExecuteIfReady = function()
  326. {
  327. // get chatroom and callbacks
  328.   dump ("before chatContentStartup\n");
  329.     chatContentStartup();
  330.     dump("after Chatcontentstartup\n");
  331.     
  332.     // startup the ender widget
  333.     startUpEditor(document.getElementById("ComposeWnd"));
  334.     
  335.     updateMemberCount();
  336.     //chatContentAddMsgToLog('goober','hi');
  337.  
  338.     try{
  339.         window.opener.close();
  340.     }
  341.     catch (e){
  342.         dump("chat: where's my invite window?? \n")
  343.     }    
  344. }
  345.  
  346. // after the window has loaded:
  347.  
  348. function chatContentOnWinLoad(){
  349.  
  350.     aimChatManager().OnWindowLoad(top);
  351.     aimChatManager().ExecuteIfReady(myExecutionCallback);
  352.     
  353.     
  354.  
  355. }
  356.  
  357.  
  358. // window is closing
  359.  
  360. function chatContentOnWinUnLoad(){
  361.     aimChatManager().OnWindowUnload(top);
  362.     try{
  363.         top.chatRoomObj.Leave()
  364.         }
  365.     catch (e){
  366.         dump("chat: there was an error trying to call chatRoomObj.leave() \n");
  367.     }    
  368.  
  369. }    
  370.  
  371.  
  372.  
  373. function startUpEditor(editorElement){
  374.  
  375.     if (!editorElement) {
  376.         dump("No editor element found\n");
  377.         return;
  378.     }
  379.     
  380.     var editorShell = editorElement.editorShell;
  381.     if(editorShell) {            
  382.         // save the editorShell in the window. The editor JS expects to find it there.
  383.         window.editorShell = editorShell;
  384.  
  385.         //SetupToolbarElements(); //defined into editor.js
  386.         window.editorShell.editorType = "html";
  387.  
  388.         window.editorShell.contentWindow = window._content;
  389.         window.editorShell.webShellWindow = window;
  390.         window.editorShell.LoadUrl("chrome://aim/content/blank.html");
  391.         EditorSharedStartup();
  392.     } else {
  393.         dump("No editorShell found\n");
  394.         return;
  395.     }
  396. }
  397.  
  398.  
  399. // updates the number of chat members (use after an add or delete member)
  400.  
  401. function updateMemberCount(){
  402.         //theTree = document.getElementById("cptChildren");
  403.         
  404.         var theTreeChildren = top.frames["chatpanel"].document.getElementsByTagName("treecell")
  405.         var activeMembers=0;
  406.         
  407.         for(i=0 ; i<theTreeChildren.length;i++){
  408.             
  409.             dump("updateMemberCount:class "+theTreeChildren.item(i).getAttribute("class")+"\n")
  410.             dump("updateMemberCount:value "+theTreeChildren.item(i).getAttribute("value")+"\n")
  411.             
  412.             if(theTreeChildren.item(i).getAttribute("class") == "joined treecell-iconic"){
  413.                 activeMembers++;
  414.             }
  415.         }
  416.         
  417.         //dump("theTreeNode"+theTree+" \n")
  418.         theMemberCountNode=document.getElementById("numberchatting")
  419.         
  420.         if(theMemberCountNode.childNodes.length >0){
  421.             theMemberCountNode.removeChild(theMemberCountNode.childNodes.item(0))
  422.             
  423.         }
  424.         
  425.         
  426.         if(activeMembers!=1){
  427.         theMemberCountNode.appendChild(document.createTextNode(aimString("chat.PeopleHere").replace(/%NumPeople%/, activeMembers)));
  428.         }
  429.         else{
  430.         theMemberCountNode.appendChild(document.createTextNode(aimString("chat.PersonHere")));
  431.         }
  432. }
  433.  
  434.  
  435.  
  436. //send your message out
  437. function SendOnEnter()
  438. {
  439.     // if enterCR_pref_value is true, the pref was set so that enter was a CR
  440.         // if enterCR_pref_value is false, the user wants enter to send the IM message
  441.     try {
  442.         enterCR_pref_value = aimPrefsManager().GetBoolPref("aim.general.im.enterCR", null, false);
  443.     }
  444.     catch (ex) {
  445.         // default to be "send on enter key"
  446.         enterCR_pref_value = true;
  447.     }
  448.     
  449.     return (!enterCR_pref_value);
  450. }
  451.  
  452.  
  453. function chatContentSendMsg(strip){
  454.  
  455.     var bodyText = editorShell.GetContentsAs("text/html", 8 + 4);
  456.     
  457.     // *** placeholder for getting strip pref.
  458.     //var strip=true
  459.  
  460.     if ( strip == true ) {
  461.         bodyText = bodyText.replace(/<br>/gi, "");
  462.         bodyText = bodyText.replace(/\n/g, "");
  463.         bodyText = bodyText.replace(/\r/g, "");
  464.     }
  465.  
  466.     bodyText = bodyText.replace(/\n/g, "");
  467.     bodyText = bodyText.replace(/\r/g, "");
  468.     bodyText = bodyText.replace(/<br><br>/gi, "<br>");
  469.     bodyText = bodyText.replace(/<br><\/body>/i, "<\/body>");
  470.     
  471.     //chatContentAddMsgToLog('noone',bodyText)
  472.     top.chatRoomObj.SendMessage(bodyText)
  473.  
  474.     top.editorShell.SelectAll();
  475.     top.editorShell.DeleteSelection(null);
  476.     //*** return focus to editor after clicking send ***
  477.     
  478.     
  479.     top._content.focus();
  480.  
  481.     //Chat Send Sound to hook
  482.     dump("Outgoing Sound works!\n");
  483.         chatSound(Components.interfaces.nsAimChatSoundEvent.ChatSoundEvent_OutgoingMsg);    
  484.  
  485. }
  486.  
  487.  
  488.  
  489. // handle incoming messages
  490.  
  491. function chatContentRecieveMsg(screenName,msg){
  492.     var chatflash=false;         
  493.     try {
  494.         chatflash=aimPrefsManager().GetBoolPref("aim.chat.FlashChatWin", null, false); 
  495.     }
  496.     catch (ex) {
  497.         chatflash = true;
  498.     }               
  499.     if (chatflash)
  500.             top.window.GetAttention();
  501.  
  502.     chatContentAddMsgToLog(screenName,msg,true)
  503.  
  504.     //Chat Receive Sound to Hook
  505.     dump("INCOMING SOUND\n");
  506.     chatSound(Components.interfaces.nsAimChatSoundEvent.ChatSoundEvent_IncomingMsg);
  507. }
  508.  
  509. function chatContentReceiveStatus(screenName, msg) {
  510.   chatContentAddMsgToLog(screenName,msg,false);
  511. }
  512.  
  513.  
  514. // sub function of chatContentRecieveMsg
  515. function chatContentAddMsgToLog(screenName,msg,isMsg){
  516.     var theLogNode = top.frames['LogWnd']
  517.     
  518.     var myRange = theLogNode.document.createRange();
  519.     var theLogBody =theLogNode.document.getElementsByTagName("body").item(0)
  520.         myRange.setStartAfter(theLogBody);
  521.     var docFrag;
  522.     // XXXVISHY - this handles info messages also
  523.     if (screenName) {
  524.       var colorpre = " ";
  525.       var colorpost = " </b> ";
  526.       if (isMsg) // otherwise it is a status
  527.         {
  528.           if (screenName == aimSessionCurrentScreenName()) 
  529.         colorpre = '<font color=\"#ff0000\">';
  530.           else
  531.         colorpre = '<font color=\"#0000ff\">';
  532.             
  533.           var colorpost = '</b>: </font>';
  534.         }
  535.     
  536.       docFrag = myRange.createContextualFragment("<html>" + colorpre + "<b>"+screenName+ colorpost+msg+"</html><br>");
  537.     } else
  538.         docFrag = myRange.createContextualFragment("<html>"+msg+"</html><br>");
  539.     //theLogNode.scrollBy(0,10000);
  540.     dump("document.height before" + theLogNode.document.height);
  541.  
  542.     theLogBody.appendChild(docFrag)
  543.             
  544.     dump("document.height after" + theLogNode.document.height+"\n");
  545.     dump("scrollX"+ theLogNode.scrollX+"\n")
  546.     dump("scrollY"+ theLogNode.scrollY+"\n")
  547.     
  548.     //theLogNode.scrollBy(0,10000);
  549.     
  550.     //if((theLogNode.scrollY + theLogNode.innerHeight) ==  theLogNode.document.height ){
  551.     theLogNode.scrollTo(theLogNode.scrollX, theLogNode.document.height)
  552.     //}
  553. }
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560. //send info to the status area
  561. // defunct!
  562. function updateStatus(statusMsg){
  563.     var statusTextNode= document.getElementById("statustext");
  564.     statusTextNode.setAttribute("value",statusMsg);
  565.  
  566. }
  567.  
  568.  
  569. // handle status changes
  570.  
  571. function chatContentStatusChange(screenName,statusItem){
  572.   //updateStatus(screenName+": "+statusItem)    
  573. }
  574.  
  575.  
  576. /*** Handle Proposal and ProposalOwner for Chat Invitations ***/
  577. var proposals = new Array(); // of all the open proposals;
  578. var aproposal = new Object();
  579.  
  580. function AimProposalOwner()
  581. {
  582.         this.OnProposalAcked = function( 
  583.               pProposal) 
  584.     { dump("OnProposalAcked"); }
  585.         
  586.         this.OnProposalError = function( 
  587.               pProposal,
  588.               pErrMsg) 
  589.     { aimErrorBox(aimString("chat.NotAvailable").replace(/%ScreenName%/, pProposal.GetProposee())); 
  590.     top.frames['chatpanel'].chatPanelRemoveScreenName(pProposal.GetProposee());
  591.     chatRoomManagerDelMember(myManager,pProposal.GetProposee());
  592.     }
  593.         
  594.         this.OnProposalAccepted = function( 
  595.               pProposal) 
  596.     { dump("OnProposalAccepted"); }
  597.         
  598.         this.OnProposalRejected = function(  pProposal)
  599.     { dump("OnProposalRejected");
  600.     aimErrorBox(aimString("chat.Declined").replace(/%ScreenName%/, pProposal.GetProposee()));
  601.     top.frames['chatpanel'].chatPanelRemoveScreenName(pProposal.GetProposee());
  602.     chatRoomManagerDelMember(myManager,pProposal.GetProposee());
  603.     }
  604.               
  605.         this.OnProposalCountered = function( 
  606.               pProposal,
  607.               pCounterProposal) 
  608.     { dump("OnProposalCountered"); }
  609.  
  610.         this.OnProposalTimeout = function(  pProposal)
  611.     { aimErrorBox(aimString("chat.TimedOut"));
  612.     
  613.     top.frames['chatpanel'].chatPanelRemoveScreenName(pProposal.GetProposee());
  614.     chatRoomManagerDelMember(myManager,pProposal.GetProposee());
  615.     }   
  616.  
  617.         this.OnProposalCancelled = function( 
  618.               pProposal)
  619.     { dump("OnProposalCancelled"); 
  620.     top.frames['chatpanel'].chatPanelRemoveScreenName(pProposal.GetProposee());
  621.     chatRoomManagerDelMember(myManager,pProposal.GetProposee());
  622.     }
  623.  
  624.     return this;
  625. }
  626.  
  627. // handle many invitations
  628. function chatContentInviteMany(inviteList,chatMsg){
  629.     // convert carriage returns and newlines to commas 
  630.     inviteList = inviteList.replace(/\n/gi, ",");
  631.     inviteList = inviteList.replace(/\r/gi, ",");
  632.  
  633.     inviteArray=inviteList.split(",")
  634.     for(inviteItem = 0; inviteItem<inviteArray.length; inviteItem++){
  635.         //test to make sure the name isnt empty
  636.         if(itemTest(inviteArray[inviteItem])){
  637.         
  638.             dump("Inviting["+inviteArray[inviteItem]+"]\n")
  639.             
  640.             aproposal = top.chatRoomObj.Invite(inviteArray[inviteItem], chatMsg);
  641.             proposals[proposals.length] = aproposal;
  642.             dump("proposals.length is " + proposals.length + "\n")
  643.             proposals[proposals.length-1].SetOwner(new AimProposalOwner());
  644.             dump("proposals.length is " + proposals.length + "\n");
  645.             //proposals.length++;
  646.             
  647.             top.frames['chatpanel'].chatPanelUpdateScreenName(inviteArray[inviteItem],"invited treecell-iconic")
  648.         
  649.             chatRoomManagerAddMember(myManager,inviteArray[inviteItem],"invited treecell-iconic",false,false)
  650.         
  651.             dump("Invited: "+inviteArray[inviteItem]+"\n");
  652.         }
  653.     }
  654.     
  655.  
  656. }
  657.  
  658.  
  659.  
  660. function itemTest(inviteItem){
  661.     var passed = true;
  662.  
  663.  
  664.     switch(inviteItem) {
  665.     
  666.         case "": 
  667.         case " ": passed = false;
  668.         break;
  669.         
  670.     
  671.     }
  672.  
  673.  
  674.     dump("itemTest: "+passed+"\n");
  675.     return passed;
  676. }
  677.  
  678. // pop up invitation window:
  679.  
  680. function cmdPopUpInvite(screenNames){
  681.     //window.openDialog('chrome://aim/content/chatInviteBuddy.xul','inviteBuddy','chrome,all,dialog=no','',true,"outgoingchat"); 
  682.      inviteArgsObj = {
  683.          inviteProposalScreenName: '', 
  684.          inviteProposalObj: null,
  685.          invitedScreenNames: screenNames,
  686.          inviteToExistingWindow: true,
  687.          inviteMode: 'outgoingchat',
  688.     inviteToExistingRoom: chatRoomName
  689.          }
  690.              
  691.     window.openDialog('chrome://aim/content/chatInviteBuddy.xul','inviteBuddy','chrome,all,dialog=no',inviteArgsObj); 
  692.  
  693. }
  694.  
  695. // display room info
  696.  
  697. function cmdRoomInfo(){
  698.     window.openDialog('chrome://aim/content/chatRoomInfo.xul','inviteBuddy','chrome,all,dialog=yes,resizable=no,titlebar',chatRoomName, top.chatRoomObj.GetLanguage(), top.chatRoomObj.GetMaxMessageLength(),RoomCreationTimeStamp.toLocaleString()); 
  699. }
  700.  
  701. function createInstance( contractid, iidName )
  702. {
  703.     var iid = eval( "Components.interfaces." + iidName );
  704.     return Components.classes[ contractid ].createInstance( iid );
  705. }
  706.  
  707.  
  708. function cmdFilePrint()
  709. {
  710.     dump("Implement Menu Command cmdFilePrint()\n");
  711.     top.frames["LogWnd"].print();
  712. }
  713.  
  714.  
  715. function fixScrolling(){
  716.     var LogWindow = top.frames["LogWnd"]
  717.     var pageY = LogWindow.pageYOffset
  718.     var docHeight = LogWindow.innerHeight
  719.  
  720. }
  721.